package BehavioralPattern.Observer.Observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @Classname : Subject
 * @Description : 被观察者
 * @Author : chentianyu
 * @Date 2023/3/4 22:39
 */

// 抽象被观察者
public abstract class Subject {

    private List<Observer> observers = new ArrayList<>();

    // 注册一个观察者
    public void addObserver(Observer observer) {
        this.observers.add(observer);
    }

    // 删除一个观察者
    public void delObserver(Observer observer) {
        this.observers.remove(observer);
    }

    // 通知注册的观察者
    private void notifyObservers() {
        for (Observer observer : this.observers) {
            observer.update(this);
        }
    }

    // 执行具体业务，并触发通知注册的观察者
    public void operate() {
        this.doSomething();
        this.notifyObservers();
    }

    protected abstract void doSomething();
}
